<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const p1 = new Promise((resolve,reject)=>{
            try{
                console.log('开始请求A')
                // throw new Error('请求A数据失败') //无论调用finally的promise实例是成功还是失败，都可以进入finally的回调函数中执行
                setTimeout(()=>{
                    console.log('A请求成功')
                    resolve('okok')
                },2000)
            }catch(e){
                reject(e.message)
            }
        })
        const p2 = p1.finally((reason)=>{

             console.log(reason) // undefined  finally不接收调用finally的promise实例的值
             throw new Error('错误')  //4.如果finally回调函数中报错，则finally回调函数的返回值是错误状态的promise，值为错误信息
        // 1. return 1  //finally的返回值默认穿透 和调用finally的promise实例保持一致
        // 2.   return new Promise(((resolve,reject)=>{//
        //     try{
        //         console.log('开始请求B')
        //         setTimeout(()=>{
        //             console.log('B请求成功')
        //             resolve('OOOOA')
        //         },2000)
        //     }catch(e){
        //         reject(e.message)
        //     }
        // }))   //return一个成功的promise实例，finally的返回值还是穿透 和调用finally的promise实例保持一致

        //  3. return new Promise(((resolve,reject)=>{//
        //      try{
        //          console.log('开始请求B')
        //          throw new Error('请求B数据失败')
        //          setTimeout(()=>{
        //              console.log('B请求成功')
        //              resolve('OOOOA')
        //          },2000)
        //      }catch(e){
        //          reject(e.message)
        //      }
        //  })) return一个失败的promise实例，finally返回值和return的错误状态的promise实例保持一致
        }) 
        console.log(p2)
    </script>
</body>
</html>